package com.lagou.bigdata.task03;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 编程实现服务器端
 */
public class ServerObjectTest {

	public static void main(String[] args) {
		ServerSocket ss = null;
		Socket s = null;
		ObjectInputStream ois = null;
		ObjectOutputStream oos = null;

		try {
			// 1.构造ServerSocket类型的对象并提供端口号
			ss = new ServerSocket(8888);

			// 2.等待客户端的连接请求，调用accept方法
			System.out.println("等待客户端的连接请求...");
			s = ss.accept();
			System.out.println("客户端连接成功！");

			// 3.使用输入输出流进行通信
			// 接收客户端发来的对象，使用对象输入流
			ois = new ObjectInputStream(
					s.getInputStream());
			UserMessage tum = (UserMessage) ois.readObject();
			System.out.println("服务器接收到的对象是：" + tum);
			// 针对客户端发来的账户信息进行校验
			if("admin".equals(tum.getUser().getUserName()) &&
					"123456".equals(tum.getUser().getPassWord())) {
				tum.setType("success");
			} else {
				tum.setType("fail");
			}
			// 将服务器的校验结果发送给客户端，使用对象输出流
			oos = new ObjectOutputStream(
					s.getOutputStream());
			oos.writeObject(tum);
			System.out.println("服务器发送校验结果成功！");
		} catch (IOException | ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			// 4.关闭Socket并释放有关的资源
			if (null != oos) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != ois) {
				try {
					ois.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != s) {
				try {
					s.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != ss) {
				try {
					ss.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

}
